package fr.thelem.gestiondemandesthelem.dao.model;

/**
 * 
 */

import static javax.persistence.CascadeType.PERSIST;
import static javax.persistence.CascadeType.REMOVE;
import static javax.persistence.FetchType.EAGER;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * Entité ParametreDemande: Représente les paramètres d'une demande
 */
@Entity
@Table(name = "CD_PARAMETRE_DEMANDE")
public class CDParametreDemandeEntity implements Serializable {
    /** Attribut serialVersionUID */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue
    @Column(name = "IDENTIFIANT_CD_PARAMETRE_DEMANDE")
    private int identifiantParametreDemande;

    @Column(name = "NOM_CD_PARAMETRE_DEMANDE", unique = true)
    private String nomParametreDemande;

    @Column(name = "TYPE_SAISIE_CD_PARAMETRE_DEMANDE")
    private String typeSaisieParametreDemande;

    @OneToMany(cascade = {PERSIST}, mappedBy = "CDParametresDemandeCorrespondanceParametre")
    private Collection<CorrespondanceParametresEntity> correspondanceParametreCDParametreDemandes;

    @ManyToMany(cascade = {PERSIST}, mappedBy = "CDParametresDemandeCDDemande")
    private Collection<CDDemandeEntity> CDDemandesCDParametreDemande;

    @OneToMany(cascade = {PERSIST}, mappedBy = "CDParametresDemandeCPParametreDemande", fetch = EAGER)
    private Collection<CPParametreDemandeEntity> CPParametresDemandeCDParametreDemande;

    @OneToMany(cascade = {PERSIST, REMOVE}, mappedBy = "CDParametreDemandeCDParametreDemandeValeurs")
    private Collection<CDParametreDemandeValeursEntity> CDParametresDemandeValeursCDParametreDemande;

    @OneToMany(mappedBy = "CDParametreDemandeCDAttributsParametreDemande")
    private Collection<CDAttributsParametreDemandeEntity> CDAttributsParametreDemandeCDParametreDemande;

    /**
     * Constructeur
     */
    public CDParametreDemandeEntity() {
        super();
        this.CDDemandesCDParametreDemande = new HashSet<CDDemandeEntity>();
        this.CDParametresDemandeValeursCDParametreDemande = new HashSet<CDParametreDemandeValeursEntity>();
        this.CPParametresDemandeCDParametreDemande = new HashSet<CPParametreDemandeEntity>();
        this.CDAttributsParametreDemandeCDParametreDemande = new HashSet<CDAttributsParametreDemandeEntity>();
    }

    /**
     * Accesseur de identifiantParametreDemande
     * 
     * @return le identifiantParametreDemande
     */
    public int getIdentifiantParametreDemande() {
        return identifiantParametreDemande;
    }

    /**
     * Affectation de identifiantParametreDemande
     * 
     * @param identifiantParametreDemande identifiantParametreDemande à affecter
     */
    public void setIdentifiantParametreDemande(int identifiantParametreDemande) {
        this.identifiantParametreDemande = identifiantParametreDemande;
    }

    /**
     * Accesseur de nomParametreDemande
     * 
     * @return le nomParametreDemande
     */
    public String getNomParametreDemande() {
        return nomParametreDemande;
    }

    /**
     * Affectation de nomParametreDemande
     * 
     * @param nomParametreDemande nomParametreDemande à affecter
     */
    public void setNomParametreDemande(String nomParametreDemande) {
        this.nomParametreDemande = nomParametreDemande;
    }

    /**
     * Accesseur de typeSaisieParametreDemande
     * 
     * @return le typeSaisieParametreDemande
     */
    public String getTypeSaisieParametreDemande() {
        return typeSaisieParametreDemande;
    }

    /**
     * Affectation de typeSaisieParametreDemande
     * 
     * @param typeSaisieParametreDemande typeSaisieParametreDemande à affecter
     */
    public void setTypeSaisieParametreDemande(String typeSaisieParametreDemande) {
        this.typeSaisieParametreDemande = typeSaisieParametreDemande;
    }

    /**
     * Accesseur de correspondanceParametreCDParametreDemandes
     * 
     * @return le correspondanceParametreCDParametreDemandes
     */
    public Collection<CorrespondanceParametresEntity> getCorrespondanceParametreCDParametreDemandes() {
        return correspondanceParametreCDParametreDemandes;
    }

    /**
     * Affectation de correspondanceParametreCDParametreDemandes
     * 
     * @param correspondanceParametreCDParametreDemandes correspondanceParametreCDParametreDemandes à affecter
     */
    public void setCorrespondanceParametreCDParametreDemandes(Collection<CorrespondanceParametresEntity> correspondanceParametreCDParametreDemandes) {
        this.correspondanceParametreCDParametreDemandes = correspondanceParametreCDParametreDemandes;
    }

    /**
     * Accesseur de cDDemandesCDParametreDemande
     * 
     * @return le cDDemandesCDParametreDemande
     */
    public Collection<CDDemandeEntity> getCDDemandesCDParametreDemande() {
        return CDDemandesCDParametreDemande;
    }

    /**
     * Affectation de cDDemandesCDParametreDemande
     * 
     * @param cDDemandesCDParametreDemande cDDemandesCDParametreDemande à affecter
     */
    public void setCDDemandesCDParametreDemande(Collection<CDDemandeEntity> cDDemandesCDParametreDemande) {
        CDDemandesCDParametreDemande = cDDemandesCDParametreDemande;
    }

    /**
     * Accesseur de cPParametresDemandeCDParametreDemande
     * 
     * @return le cPParametresDemandeCDParametreDemande
     */
    public Collection<CPParametreDemandeEntity> getCPParametresDemandeCDParametreDemande() {
        return CPParametresDemandeCDParametreDemande;
    }

    /**
     * Affectation de cPParametresDemandeCDParametreDemande
     * 
     * @param cPParametresDemandeCDParametreDemande cPParametresDemandeCDParametreDemande à affecter
     */
    public void setCPParametresDemandeCDParametreDemande(Collection<CPParametreDemandeEntity> cPParametresDemandeCDParametreDemande) {
        CPParametresDemandeCDParametreDemande = cPParametresDemandeCDParametreDemande;
    }

    /**
     * Accesseur de cDParametresDemandeValeursCDParametreDemande
     * 
     * @return le cDParametresDemandeValeursCDParametreDemande
     */
    public Collection<CDParametreDemandeValeursEntity> getCDParametresDemandeValeursCDParametreDemande() {
        return CDParametresDemandeValeursCDParametreDemande;
    }

    /**
     * Affectation de cDParametresDemandeValeursCDParametreDemande
     * 
     * @param cDParametresDemandeValeursCDParametreDemande cDParametresDemandeValeursCDParametreDemande à affecter
     */
    public void setCDParametresDemandeValeursCDParametreDemande(Collection<CDParametreDemandeValeursEntity> cDParametresDemandeValeursCDParametreDemande) {
        CDParametresDemandeValeursCDParametreDemande = cDParametresDemandeValeursCDParametreDemande;
    }

    /**
     * Accesseur de cDAttributsParametreDemandeCDParametreDemande
     * 
     * @return le cDAttributsParametreDemandeCDParametreDemande
     */
    public Collection<CDAttributsParametreDemandeEntity> getCDAttributsParametreDemandeCDParametreDemande() {
        return CDAttributsParametreDemandeCDParametreDemande;
    }

    /**
     * Affectation de cDAttributsParametreDemandeCDParametreDemande
     * 
     * @param cDAttributsParametreDemandeCDParametreDemande cDAttributsParametreDemandeCDParametreDemande à affecter
     */
    public void setCDAttributsParametreDemandeCDParametreDemande(Collection<CDAttributsParametreDemandeEntity> cDAttributsParametreDemandeCDParametreDemande) {
        CDAttributsParametreDemandeCDParametreDemande = cDAttributsParametreDemandeCDParametreDemande;
    }

}
